/*
 * This file is part of the eccOS Library.
 * Copyright (C) 2007.
 *
 * Version: MPL 1.1/GPL 2.0/LGPL 2.1
 *
 * The contents of this file are subject to the Mozilla Public License Version
 * 1.1 (the "License"); you may not use this file except in compliance with
 * the License. You may obtain a copy of the License at
 * http://www.mozilla.org/MPL/
 *
 * Software distributed under the License is distributed on an "AS IS" basis,
 * WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License
 * for the specific language governing rights and limitations under the
 * License.
 *
 * Alternatively, the contents of this file may be used under the terms of
 * either the GNU General Public License Version 2 or later (the "GPL"), or
 * the GNU Lesser General Public License Version 2.1 or later (the "LGPL"),
 * in which case the provisions of the GPL or the LGPL are applicable instead
 * of those above. If you wish to allow use of your version of this file only
 * under the terms of either the GPL or the LGPL, and not to allow others to
 * use your version of this file under the terms of the MPL, indicate your
 * decision by deleting the provisions above and replace them with the notice
 * and other provisions required by the GPL or the LGPL. If you do not delete
 * the provisions above, a recipient may use your version of this file under
 * the terms of any one of the MPL, the GPL or the LGPL.
 */
package org.openeccos.widgets;

import java.util.Calendar;

import nextapp.echo2.app.Component;
import nextapp.echo2.app.ContentPane;
import nextapp.echo2.app.Extent;
import nextapp.echo2.app.FloatingPane;
import nextapp.echo2.app.PaneContainer;

import org.openeccos.EccosAppInstance;
import org.openeccos.dao.EccosService;
import org.openeccos.model.MTask;
import org.openeccos.util.PDUtil;

import com.sas.framework.expojo.ModelExposer;

/**
 * A <code>Component</code> which renders its contents in a floating, movable
 * window.
 * <p>
 * <b>NOTE:</b> A <code>WindowPane</code> may only be added to a
 * <code>ContentPane</code>.
 */
public class PDShortcut extends Component implements FloatingPane, PaneContainer {

	public static final String PROPERTY_POSITION_X = "positionX";
	public static final String PROPERTY_POSITION_Y = "positionY";
	public static final String PROPERTY_ACTION_EVENT = "action_event";
	public static final String PROPERTY_TITLE = "title";
	public static final String PROPERTY_ICON = "icon";

	private MTask task;

	public PDShortcut(MTask task, String img) {
		this.task = task;
		String s = task.getName();
		if (task.getStatus() == MTask.STATUS_ACCEPTED_AND_WAITING_FOR_ANSWER) {
			s += " (awaiting answer...)";
		}
		setProperty(PROPERTY_TITLE, s);
		setProperty(PROPERTY_ICON, PDUtil.getImage(img));
		setProperty(PROPERTY_POSITION_X, new Extent(task.getShortcutX()));
		setProperty(PROPERTY_POSITION_Y, new Extent(task.getShortcutY()));
	}

	@Override
	public boolean isValidChild(Component component) {
		return getComponentCount() == 0;
	}

	@Override
	public boolean isValidParent(Component parent) {
		return parent instanceof ContentPane;
	}

	@Override
	public void processInput(String inputName, Object inputValue) {
    	if (PROPERTY_POSITION_X.equals(inputName)) {
    		task.setShortcutX(((Extent) inputValue).getValue());
        } else if (PROPERTY_POSITION_Y.equals(inputName)) {
        	task.setShortcutY(((Extent) inputValue).getValue());
    		if (task.getShortcutX() < 40 && task.getShortcutY() < 68) {  //compare with PDShortcut.js line 138
    			task.setDoneDate(Calendar.getInstance().getTime());
    			setVisible(false);
    		}
    		if (task.getId() > 0) {
    			EccosService service =(EccosService)ModelExposer.get().getService(EccosService.NAME);
    			service.persist(task);  //store the new position
    		}
        } else if (PROPERTY_ACTION_EVENT.equals(inputName)) {
        	task.executeTask();
        }
    }
}